home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / macrosrc.arc / ARRAY.ASM < prev    next >
Encoding:
Assembly Source File  |  1983-11-17  |  2.6 KB  |  97 lines

  1.  
  2. *ARRAY MACROS
  3. *AFFECTS:   XR0, AC, T, P
  4. *
  5. *      ARRAY <NAME>,(<1ST DIM ARG>,<2ND DIM>,<2ND DIM ARG>, ... )
  6. *
  7. *ARGUMENTS MAY BE CONSTANTS OR VARIABLES
  8. *DIMENSIONS MUST BE CONSTANTS (< 13 BITS)
  9. *<NAME> MAY BE A CONSTANT ARRAY NAME: FOO
  10. *       OR A VARIABLE CONTAINING A POINTER TO THE
  11. *       ARRAY: (FOO)
  12. *
  13. *ARRAY LOCATION IS LEFT IN THE AC
  14.  
  15.        COPY MACROS.LCAC
  16.  
  17. ARRAY  $MACRO            A,B,T
  18.        $IF  T.L=0        USE XR0 AS TEMP
  19.        $ASG 'XR0' TO T.S
  20.        $ENDIF
  21.        $ARY2 :T:,:B:     CALL ARY2 WITH TEMP
  22.        $IF  A.L#=0
  23.        $IF  A.A&$POPL
  24.        ADD :A:           ADD ARRAY OFFSET VAR
  25.        $ELSE
  26.        SACL :T:,0        SAVE INDEX COMP
  27.        LCAC :A:          LOAD ARRAY ADDR :A:
  28.        ADD  :T:,0        ADD INDEX
  29.        $ENDIF
  30.        $ENDIF
  31.        $END
  32.  
  33. $ARY2  $MACRO            T,A,B,C,A2,B2,C2
  34.        $IF  B.L=0
  35.        $IF  A.SA&$UNDF
  36.        LACK :A:          LOAD CONST 1ST DIM :A:
  37.        $ELSE
  38.        LAC  :A:,0        LOAD 1ST DIM :A:
  39.        $ENDIF
  40.        $ELSE
  41.        $IF  C.SA&$UNDF
  42.        LACK :C:          LOAD CONST 2ND DIM :C:
  43.        $ELSE
  44.        LAC  :C:,0        LOAD 2ND DIM :C:
  45.        $ENDIF
  46.        $IF  A.SA&$UNDF
  47.        CALL LTK$         LOAD CONST 1ST DIM :A:
  48.        REF  LTK$
  49.        DATA :A:
  50.        $ELSE
  51.        LT   :A:          LOAD 1ST DIM :A:
  52.        $ENDIF
  53.        $IF  B.SA&$UNDF
  54.        MPYK :B:          MPY BY DIM OF :C:
  55.        $ELSE
  56.        MPY  :B:          MPY BY DIM OF :C:
  57.        $ENDIF
  58.        APAC              ADD 1ST AND 2ND DIM
  59.        $IF  A2.L#=0
  60.        SACL :T:,0        SAVE IN :T:
  61.        $IF  B2.SA&$UNDF
  62.        LACK :B2:         LOAD CONST 3RD DIM :B2:
  63.        $ELSE
  64.        LAC  :B2:,0       LOAD 3RD DIM :B2:
  65.        $ENDIF
  66.        LT   :T:          LOAD 1ST+2ND DIM
  67.        $IF  A2.SA&$UNDF
  68.        MPYK :A2:         MPY BY DIM OF :B2:
  69.        $ELSE
  70.        MPY  :A2:         MPY BY DIM OF :B2:
  71.        $ENDIF
  72.        APAC              1ST+2ND+3RD DIM
  73.        $IF  C2.L#=0      IF MORE DIM, RECUR
  74.        $ARY3             :T:,:C2:
  75.        $ENDIF
  76.        $ENDIF
  77.        $ENDIF
  78.        $END
  79.  
  80. $ARY3  $MACRO            T,A,B,C
  81.        SACL :T:,0        SAVE 1ST TO N-1TH DIM IN :T:
  82.        $IF  B.SA&$UNDF
  83.        LACK :B:          LOAD CONST NTH DIM :B:
  84.        $ELSE
  85.        LAC  :B:,0        LOAD CONST NTH DIM :B:
  86.        $ENDIF
  87.        LT   :T:          LOAD 1ST TO N-1TH DIM
  88.        $IF  A.SA&$UNDF
  89.        MPYK :A:          MPY BY DIM OF :B:
  90.        $ELSE
  91.        MPY  :A:          MPY BY DIM OF :B:
  92.        $ENDIF
  93.        APAC              SUM 1ST TO NTH DIM
  94.        $IF  C.L#=0       IF MORE DIM, RECUR
  95.        $ARY3             :T:,:C:
  96.        $ENDIF
  97.        $END